/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package biblioteca;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.*;

/**
 *
 * @author leovirgilio
 */
public class Utilitario {

    //FINALIZADO
    public static String lerTeclado(String rotulo) {
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader ler = new BufferedReader(isr);
        String entrada = "";
        System.out.printf(rotulo + "..: ");
        try {
            entrada = ler.readLine();
        } catch (IOException obj) {
        }
        return (entrada);
    }

    //FINALIZADO
    public static boolean validarISBN(String isbn) {
        Pattern pattern = Pattern.compile("\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d");
        Matcher matcher = pattern.matcher(isbn);

        return matcher.find();
    }

    //FINALIZADO
    public static boolean validarCPF(String cpf) {
        //------- Rotina para CPF

        if (cpf.length() == 11) {
            int d1, d2;
            int digito1, digito2, resto;
            int digitoCPF;
            String nDigResult;
            d1 = d2 = 0;
            digito1 = digito2 = resto = 0;
            for (int nCount = 1; nCount < cpf.length() - 1; nCount++) {
                digitoCPF = Integer.valueOf(cpf.substring(nCount - 1, nCount)).intValue();
//--------- Multiplique a ultima casa por 2 a seguinte por 3 a seguinte por 4 e assim por diante.
                d1 = d1 + (11 - nCount) * digitoCPF;
//--------- Para o segundo digito repita o procedimento incluindo o primeiro digito calculado no passo anterior.
                d2 = d2 + (12 - nCount) * digitoCPF;
            };
//--------- Primeiro resto da divisão por 11.
            resto = (d1 % 11);
//--------- Se o resultado for 0 ou 1 o digito é 0 caso contrário o digito é 11 menos o resultado anterior.
            if (resto < 2) {
                digito1 = 0;
            } else {
                digito1 = 11 - resto;
            }
            d2 += 2 * digito1;
//--------- Segundo resto da divisão por 11.
            resto = (d2 % 11);
//--------- Se o resultado for 0 ou 1 o digito é 0 caso contrário o digito é 11 menos o resultado anterior.
            if (resto < 2) {
                digito2 = 0;
            } else {
                digito2 = 11 - resto;
            }
//--------- Digito verificador do CPF que está sendo validado.
            String nDigVerific = cpf.substring(cpf.length() - 2, cpf.length());
//--------- Concatenando o primeiro resto com o segundo.
            nDigResult = String.valueOf(digito1) + String.valueOf(digito2);
//--------- Comparar o digito verificador do cpf com o primeiro resto + o segundo resto.
            return nDigVerific.equals(nDigResult);
        }
        return false;
    }

    //FINALIZADO
    public static boolean validarMes(String mes) {

        return "JAN".matches(mes) || "FEV".matches(mes) || "MAR".matches(mes)
                || "ABR".matches(mes) || "MAI".matches(mes) || "JUN".matches(mes)
                || "JUL".matches(mes) || "AGO".matches(mes) || "SET".matches(mes)
                || "OUT".matches(mes) || "NOV".matches(mes) || "DEZ".matches(mes);
    }

    //FINALIZADO
    public static boolean validarEmail(String email) {
        Pattern pattern = Pattern.compile("^[\\w-]+(\\.[\\w-]+)*@([\\w-]+\\.)+[a-zA-Z]{2,7}$");
        Matcher matcher = pattern.matcher(email);

        //VERIFICAR SE A MASCARA DO EMAIL É VERDADEIRA
        if (matcher.find()) {

            //VERIFICA SE TODO O EMAIL É MENOR QUE 256 CARACTERES
            if (email.length() <= 256) {

                //VERIFICA SE O local POSSUI MENOS QUE 64 CARACTERES
                if (email.indexOf('@') <= 64) {

                    //EXTRAI A SUB STRING DO EMAIL (TUDO QUE VEM DEPOIS DO @)
                    String dominio = email.substring(email.indexOf('@'));
                    System.out.println(dominio);

                    //VERIFICA SE O DOMINIO POSSUI DE 2 A 63 CARACTERES
                    if (dominio.length() <= 63 & dominio.length() >= 2) {
                        String etiqueta1 = dominio.substring(dominio.lastIndexOf('@') + 1, dominio.lastIndexOf('.'));
                        String etiqueta2 = dominio.substring(dominio.indexOf('.') + 1);

                        //VERIFICA SE A ETIQUETA 1 E 2 É MAIOR IGUAL QUE 2 E MENOR IGUAL 63
                        if (etiqueta1.length() >= 2 & etiqueta1.length() <= 63 & etiqueta2.length() >= 2 & etiqueta2.length() <= 63) {
                            return true;
                        }
                    }/* else {
                     JOptionPane.showMessageDialog(null, "Erro no domínio do email.\n" + email, "Erro", JOptionPane.ERROR_MESSAGE);
                     }
                     } else {
                     JOptionPane.showMessageDialog(null, "Local possui mais que 64 caracteres.\n" + email, "Erro", JOptionPane.ERROR_MESSAGE);
                     }
                     } else {
                     JOptionPane.showMessageDialog(null, "Email possui mais que 256 caracteres.\n" + email, "Erro", JOptionPane.ERROR_MESSAGE);
                     }
                     } else {
                     JOptionPane.showMessageDialog(null, "Email não é válido.\n" + email, "Erro", JOptionPane.ERROR_MESSAGE);
                     }*/
                }
            }
        }
        return false;
    }
}